The background description provided here is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
On mobile devices, search results, advertisements, and other content may be associated with links that are followed when the content is selected or otherwise interacted with. These links traditionally are to websites and include a URL (Uniform Resource Locator) with an HTTP: or HTTPs: scheme. These links, whether encountered in a web browser, a native application (app), or a launcher app, may be handled by the default web browser on the device.
With more and more content being available in apps, and with increasing user interaction with apps, some links allow a native app on the mobile device to be opened. For example, a search for restaurants may return links to restaurant information on the web as well as a link to open a native app, such as the YELP restaurant review app.
Deep links allow a user to be taken directly into a specific state (or, screen) of an app. For example, a search for a particular restaurant may have results for the website of that restaurant as well as the specific state of the YELP app having information about that restaurant. While powerful, deep links are not necessarily easy to implement. For example, a deep link in a web page rendered by a browser may not have direct access to information about the native apps installed on the mobile device.
Therefore, code associated with a deep link may make educated guesses about the format and availability of deep links. With the huge variety of operating system versions, web browsers, and versions of those web browsers, code attempting to effectuate deep links is very complicated. Depending on the browser, the operating system, and the code associated with a deep link, attempting to traverse a deep link for a YELP state may fail if the YELP app is not installed, or instead may be redirected to a web edition of the YELP app. In fact, some deep link formats may even crash a browser session.
One example format of a deep link may be a URL with a custom scheme. For example, for the YP business directory app, a scheme of “YP” may be registered with the operating system. A deep link for a business with an ID of 123 may be “yp://id/123,” although no consistent format is required for such custom scheme deep links. As another example, a deep link may appear to be a standard HTTP URL, such as “HTTP://yp.com/business/123.” Although this is a standard URL that can be passed to a browser, if the YP app has been installed, the domain “YP.com” may have been registered with the operating system so that the URL will be passed to the YELP app instead of to the browser.
Some mobile browsers, such as a recent version of Chrome, provide formal support for deep link redirecting. The native deep link URL can be broken down into parameters of an “intent” URI. The parameter “S.browser_fallback_url” will handle redirection to a fallback URL if the app is not installed. Many other mobile browsers do not provide formal support for deep link redirection so a variety of workarounds have been implemented to execute the desired redirection behavior. One approach is to open the deep link inside a hidden iframe to hide any “invalid URL” error messaging, and then attaching an event listener to the iframe to detect if the native app opened or not.
Yet another form of deep link is a data structure that includes parameters related to the app, the desired function, and the entity of interest (such as the business having the ID of 123). For the ANDROID operating system, this data structure may be a JAVA object called an intent. This object may not be interpretable by a browser, so if the corresponding app is not installed, resulting behavior may be undefined.
Another approach to deep links is user interface (UI) scripting, which, after opening an app, sends user interface events to the app to navigate to the desired state. Such a script may, in some implementations, be extended to download and install the app if the app is not yet installed. After the app is installed, the script will open the app and then navigate to the desired state. To provide user interface events, and in some implementations to read information from the app in order to send the correct UI events, an accessibility interface may be used. The accessibility interface may be provided by the operating system to privileged apps to allow UI automation. The term deferred deep-linking may refer to any access mechanism that first installs the application prior to navigating to the desired state.